package com.efast.cafe.portal.service.company;

import java.util.List;
import java.util.Map;

import com.efast.cafe.commponent.query.service.IQueryService;
import com.efast.cafe.framework.exception.ServiceException;
import com.efast.cafe.framework.pager.Pagination;
import com.efast.cafe.framework.service.ICafeService;
import com.efast.cafe.portal.bean.company.PortalCompanyUserAddEditBean;
import com.efast.cafe.portal.bean.company.PortalCompanyUserBean;
import com.efast.cafe.portal.bean.company.PortalCompanyUserQueryBean;
import com.efast.cafe.portal.entity.company.PortalCompanyRole;
import com.efast.cafe.portal.entity.company.PortalCompanyUser;
import com.efast.cafe.portal.entity.company.PortalCompanyUserReporttoTreeDto;
import com.efast.cafe.portal.remote.company.PortalCompanyUserService;



/**
 * 企业用户管理服务
 * 
 * @author xuanming.feng
 * 
 */
public interface IPortalCompanyUserService extends PortalCompanyUserService,ICafeService<PortalCompanyUser> {

	/**
	 * 分页查询企业用户列表 默认附加条件companyCode
	 * 
	 * @param pager
	 * @param username
	 *            根据用户名模糊匹配
	 * @return
	 */
	public Pagination<PortalCompanyUser> queryPageUserList(Pagination<PortalCompanyUser> pager, String username,
			String email, String phone);

	/**
	 * 根据id获取企业用户 默认附加条件companyCode
	 * 
	 * @param portalCompanyUserId
	 * @return
	 */
	public PortalCompanyUser getCompanyUserById(Long portalCompanyUserId);
	/**
	 * 查询用户详情
	 * @param portalCompanyUserId
	 * @return
	 */
	public PortalCompanyUser queryUserDetail(Integer portalCompanyUserId);

	/**
	 * 新增企业用户 校验用户名是否存在 存在抛出ServiceException
	 * 
	 * @param portalCompanyUser
	 * @return
	 */
	public Long insertCompanyUser(PortalCompanyUserAddEditBean portalCompanyUser, String pwd) throws ServiceException;

	/**
	 * 修改企业用户 用户名不能修改
	 * 
	 * @param portalCompanyUser
	 */
	public void updateCompanyUser(PortalCompanyUserAddEditBean portalCompanyUser) throws ServiceException;
	
	
	public PortalCompanyUserAddEditBean queryEditDetailUser(PortalCompanyUserAddEditBean portalCompanyUser);

	/**
	 * 校验用户名是否存在 默认附加条件companyCode
	 * 
	 * @param username
	 * @return
	 */
	public boolean usernameIsExist(String username, String companyCode);

	/**
	 * 逻辑删除用户 set is_delete=1
	 * 
	 * @param portalCompanyUserId
	 */
	public void deleteUser(Long portalCompanyUserId);
	public void deleteUsers(List<Integer> ids);;

	/**
	 * 获取企业用户已分配的角色列表 默认附加条件companyCode
	 * 
	 * @param username
	 * @return
	 */
	public List<PortalCompanyRole> queryUserHasRoleList(String username, String companyCode);

	/**
	 * 获取企业用户未被分配的角色列表 默认附加条件companyCode
	 * 
	 * @param username
	 * @return
	 */
	public List<PortalCompanyRole> queryUserNotHasRoleList(String username, String companyCode);

	/**
	 * 保存企业用户和角色关系
	 * 
	 * @param username
	 * @param portalCompanyRoleIds
	 */
	public void saveUserRole(String username, Long[] portalCompanyRoleIds, String companyCode);
	
	/**
	 *
	    * @Title: saveUserByRole
	    * @Description: 在角色下添加用户成员
	    * @param @param usernames
	    * @param @param portalCompanyRoleId
	    * @param @param companyCode    参数
	    * @return void    返回类型
	    * @throws
	 */
	public void saveUserByRole(List<String> usernames,Long portalCompanyRoleId,String companyCode);
	
	/**
	 * 
	    * @Title: removeUserByRole
	    * @Description: 角色下批量移除成员
	    * @param @param usernames
	    * @param @param portalCompanyRoleId
	    * @param @param companyCode    参数
	    * @return void    返回类型
	    * @throws
	 */
	public void removeUserByRole(List<String> usernames,Long portalCompanyRoleId,String companyCode);

	/**
	 * 通过企业code 查询企业用户
	 * 
	 * @Date : 2016-6-24
	 * @return
	 */
	public List<PortalCompanyUser> queryListByCompany(String companyCode);

	/**
	 * 查询当前用户 所属企业code
	 * 
	 * @Date : 2016-6-24
	 * @return
	 */
	public String getCompanyCode();

	/**
	 * 查询当前用户ID
	 * 
	 * @Date : 2016-6-24
	 * @return
	 */
	public Long getUserId();

	/**
	 * 根据companyCode获取用户
	 * 
	 * @Date : 2016-6-23
	 * @param companyCode
	 * @return
	 */
	public List<PortalCompanyUser> findUserByCompanyCode(String companyCode);

	/**
	 * 管理员修改用户密码
	 * 
	 * @Date : 2016-6-30
	 * @param username
	 * @param password
	 */
	public void changePassword(String username, String password);

	/**
	 * 用户修改自己的密码
	 * 
	 * @Date : 2016-7-5
	 * @param password
	 */
	public void changeMyPassword(String password);

	/**
	 * 查询当前企业用户对应职位部门列表
	 * 
	 * @Date : 2016年11月23日
	 * @return
	 */
	public PortalCompanyUserQueryBean getListUserByCompanyUser(PortalCompanyUserQueryBean querybean);

	/**
	 * 加载用户列表及其顶级部门
	 * 
	 * @Date : 2016年12月9日
	 * @param queryBean
	 * @return
	 */
	public PortalCompanyUserQueryBean getListUserTopOrgByCompanyUser(PortalCompanyUserQueryBean queryBean);

	/**
	 * 设置用户单个角色
	 * 
	 * @param username
	 * @param portalCompanyRoleId
	 */
	public void saveUserOneRole(String username, Integer portalCompanyRoleId);

	/**
	 * 移除用户单个角色
	 * 
	 * @param username
	 * @param portalCompanyRoleId
	 */
	public void removeUserOneRole(String username, Integer portalCompanyRoleId);

	/**
	 * 根据用户名和企业code删除用户
	 */
	public void deleteUserBycompanyCodeAndUser(String username, String company_code);

	public PortalCompanyUser userLogin(String companyCode, String username, String pwd) throws ServiceException;

	public PortalCompanyUserBean queryUserInfo(String companyCode, String username);

	/**
	 * 根据id的查询类型查询用户信息
	 * 
	 * @param ids
	 * @param queryType
	 * @return List<PortalCompanyUserBean>
	 * @Author Administrator
	 * @Date 2017年9月25日
	 */
	public List<PortalCompanyUserBean> queryUserInfoBy(List<Integer> ids, Integer queryType);

	/**
	 * 根据条件查询用户
	 * @param bean
	 * @return List<PortalCompanyUserBean>
	 * @Author Administrator
	 * @Date 2017年9月26日
	 */
	public List<PortalCompanyUserBean> queryUserInfoByConditions(PortalCompanyUserQueryBean bean);
	
	public void doWechatUserCheckAndReg(String companyCode,String openId,String nickName,Integer sex,String headimgurl);

	public List<PortalCompanyUserReporttoTreeDto> getUserListByCondition(PortalCompanyUserReporttoTreeDto thisDto);

	public List<PortalCompanyUserReporttoTreeDto> getAdvancedSearch(PortalCompanyUserReporttoTreeDto thisDto);

}
